package com.yingqi;
import com.yingqi.mapper.IgoodsMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.yingqi.entity.Goods;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;


public class Main {
    @Test
    public void test() throws IOException {
        /*
         1. 读取全局配置文件.
            getResourceAsStream 使用的资源路径
         */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            //4 使用SqlSession创建Dao接口的代理对象
            IgoodsMapper mapper = sqlSession.getMapper(IgoodsMapper.class);
            List<Goods> list=mapper.selectAll();
            for(Goods goods:list){
                String info= String.format("id：%s,名字：%s,价格：%s,库存量：%s,点赞量：%s",goods.getId(),goods.getName(),goods.getPrice(),goods.getNum(),goods.getLike());
                System.out.println(info);
            }
        }finally{
            sqlSession.close();
        }
    }
    @Test
    public void testSave() throws IOException {
    /*
     1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
        getResourceAsStream 使用的资源路径
     */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        try {
            IgoodsMapper mapper = sqlSession.getMapper(IgoodsMapper.class);
            //创建user对象，封装要保存的数据
            Goods goods=new Goods();
            goods.setId(3);
            goods.setName("小乔");
            goods.setPrice(99);
            goods.setNum(300);
            goods.setLike(800);
            int num=mapper.save(goods);
            sqlSession.commit();
            System.out.println("添加 "+num+" 条记录");
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally {
            sqlSession.close();
        }

    }
    @Test
    public void testUpdate() throws IOException {
    /*
     1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
        getResourceAsStream 使用的资源路径
     */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        IgoodsMapper mapper = sqlSession.getMapper(IgoodsMapper.class);
        //创建user对象，封装要保存的数据
        Goods goods=new Goods();
        goods.setId(1);
        goods.setNum(700);
        goods.setPrice(500);
        int num=mapper.updateById(goods);
        System.out.println("更新 "+num+" 条记录");
        //提交事务
        sqlSession.commit();
        sqlSession.close();
        inputStream.close();
    }
    @Test
    public void testDelete() throws IOException {
    /*
     1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
        getResourceAsStream 使用的资源路径
     */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        IgoodsMapper mapper = sqlSession.getMapper(IgoodsMapper.class);
        int num=mapper.deleteById("3");
        System.out.println("删除 "+num+" 条记录");
        //提交事务
        sqlSession.commit();
        sqlSession.close();
        inputStream.close();
    }
    @Test
    public void testSelectById() throws IOException {
    /*
     1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
        getResourceAsStream 使用的资源路径
     */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        IgoodsMapper mapper = sqlSession.getMapper(IgoodsMapper.class);
        Goods goods=mapper.selectById("1");
        String info= String.format("id：%s,名字：%s,价格：%s,库存量：%s,点赞量：%s",goods.getId(),goods.getName(),goods.getPrice(),goods.getNum(),goods.getLike());
        System.out.println(info);
        sqlSession.close();
        inputStream.close();
    }
    @Test
    public void testSelectByName() throws IOException {
/*
 1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
    getResourceAsStream 使用的资源路径
 */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        IgoodsMapper mapper = sqlSession.getMapper(IgoodsMapper.class);
        List<Goods> list=mapper.selectByname("%韩%");
        for(Goods goods:list) {
            String info = String.format("id:%s,名字:%s,价格:%s,库存量:%s,点赞量:%s,",goods.getId(),goods.getName(),goods.getPrice(),goods.getNum(),goods.getLike());
            System.out.println(info);
        }
        sqlSession.close();
        inputStream.close();
    }
    @Test
    public void testSelectCount() throws IOException {
/*
 1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
    getResourceAsStream 使用的资源路径
 */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        IgoodsMapper mapper = sqlSession.getMapper(IgoodsMapper.class);
        int count=mapper.selectCount();
        System.out.println("总共记录数："+count);
        sqlSession.close();
        inputStream.close();
    }

}
